package modulos.projeto.mbeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import moduloRemoto.bo.enumerador.LookUpEnum;
import moduloRemoto.bo.interfaces.AtividadeRemote;
import moduloRemoto.bo.interfaces.ColaboradorRemote;
import moduloRemoto.bo.interfaces.TarefaRemote;
import moduloRemoto.pojo.Atividade;
import moduloRemoto.pojo.AtividadePK;
import moduloRemoto.pojo.Colaborador;
import moduloRemoto.pojo.Tarefa;
import modulos.util.ServiceLocator;

public class AtividadeMB {
	
	private Atividade atividade = new Atividade();
	private AtividadeRemote atividadeBO;
	private ColaboradorRemote colaboradorBO;	
	private TarefaRemote tarefaBO;
	
	private ArrayList<SelectItem> listaColaboradores = new ArrayList<SelectItem>();
	private Integer idColaborador;
	
	private Integer selectedTarefa;
	

	
	public AtividadeMB()
	{

		try
		{
			atividadeBO = (AtividadeRemote)ServiceLocator.getInstance().get(LookUpEnum.ATIVIDADE);
			colaboradorBO = (ColaboradorRemote)ServiceLocator.getInstance().get(LookUpEnum.COLABORADOR);
			tarefaBO = (TarefaRemote) ServiceLocator.getInstance().get(LookUpEnum.TAREFA);
			
			populaListaColaborador();
		}
		catch(Exception ex)
		{
			System.out.println("Erro ao acessar o servidor remoto " + ex.getMessage());
		}
	}
	
	private void populaListaColaborador() {
		List<Colaborador> listaColaborador = colaboradorBO.carregarListaColaboradores();
		
		for(Colaborador col:listaColaborador){
			getListaColaboradores().add(new SelectItem(col.getIdCol(),col.getNomeCol()));
		}
		
	}

	public String redirect(){
		return "redirectAtividade";
	}
	
	public String salvarAtividade(){
		if(getAtividade().getPrimaryKey().getIdAti() == 0){
			AtividadePK atividadePK = new AtividadePK();
			atividadePK.setIdCol(getIdColaborador());
			atividadePK.setIdTar(getSelectedTarefa());
			
			
			Colaborador colaborador = colaboradorBO.carregarObjeto(getIdColaborador());
			Tarefa tarefa = tarefaBO.carregarObjeto(getSelectedTarefa());
			
			getAtividade().setColaborador(colaborador);			
			getAtividade().setTarefa(tarefa);
			
			getAtividade().setStatusAti("Em Aberto");
			getAtividade().setPrimaryKey(atividadePK);			
			
		}
		else{
			AtividadePK atividadePK = new AtividadePK();
			
			Colaborador colaborador = colaboradorBO.carregarObjeto(getIdColaborador());
			Tarefa tarefa = tarefaBO.carregarObjeto(getAtividade().getPrimaryKey().getIdTar());
			
			getAtividade().setColaborador(colaborador);
			getAtividade().setTarefa(tarefa);
				
			
			atividadePK.setIdAti(getAtividade().getPrimaryKey().getIdAti());
			atividadePK.setIdCol(getIdColaborador());
			atividadePK.setIdTar(getAtividade().getPrimaryKey().getIdTar());
			
			getAtividade().setPrimaryKey(atividadePK);
		}
		
		atividadeBO.persistir(getAtividade());
		
		return "ok";
	}
	

	public void excluirAtividade(ActionEvent event){

		UIParameter component = (UIParameter) event.getComponent().findComponent("idAtiDel");
		Integer idAtividade = ((Integer)component.getValue());
		
		UIParameter component2 = (UIParameter) event.getComponent().findComponent("idTarefaAtiDel");
		Integer idTarefa = ((Integer)component2.getValue());
		
		UIParameter component3 = (UIParameter) event.getComponent().findComponent("idColaboradorAtiDel");
		Integer idColaborador = ((Integer)component3.getValue());
		
		if(idAtividade != null && idTarefa != null && idColaborador != null){
			atividadeBO.excluir(idAtividade,idColaborador,idTarefa);
		}


	}
	
	
	public void  selecionarAtividade(ActionEvent event)
	{
		UIParameter component = (UIParameter) event.getComponent().findComponent("idAti");
		Integer idAtividade = ((Integer)component.getValue());
		
		UIParameter component2 = (UIParameter) event.getComponent().findComponent("idTarefaAti");
		Integer idTarefa = ((Integer)component2.getValue());
		
		UIParameter component3 = (UIParameter) event.getComponent().findComponent("idColaboradorAti");
		Integer idColaborador = ((Integer)component3.getValue());
		

		Atividade atividade = atividadeBO.carregarObjeto(idAtividade,idColaborador,idTarefa);

		if(atividade != null){
			setAtividade(atividade);
		}
	}
	
	public void  changeSelectedTarefa(ActionEvent event)
	{
		UIParameter component = (UIParameter) event.getComponent().findComponent("idSelectedTarefa");
		Integer idTarefa = ((Integer)component.getValue());
		
		if(idTarefa != null){
			setSelectedTarefa(idTarefa);
		}

		

	}
	
	public Atividade getAtividade() {
		return atividade;
	}

	public void setAtividade(Atividade atividade) {
		this.atividade = atividade;
	}
	
	public ArrayList<SelectItem> getListaColaboradores() {
		return listaColaboradores;
	}

	public void setListaColaboradores(ArrayList<SelectItem> listaColaboradores) {
		this.listaColaboradores = listaColaboradores;
	}

	public Integer getIdColaborador() {
		return idColaborador;
	}

	public void setIdColaborador(Integer idColaborador) {
		this.idColaborador = idColaborador;
	}

	public Integer getSelectedTarefa() {
		return selectedTarefa;
	}

	public void setSelectedTarefa(Integer selectedTarefa) {
		this.selectedTarefa = selectedTarefa;
	}
}
